// adManager.js
class AdManager {
  constructor() {
    this.videoAd = null; // 视频激励广告
    this.interstitialAd = null; // 插屏广告
	
  }

  // 加载视频激励广告
  loadVideoAd(adUnitId,onCloseCallback) {
    return new Promise((resolve, reject) => {
      if (!uni.createRewardedVideoAd) {
        reject(new Error('视频激励广告API不可用'));
        return;
      }
	 if(this.videoAd){
		 console.log('已经入这里')
		 resolve('视频激励广告已加载过')
		 return
	 }
      this.videoAd = uni.createRewardedVideoAd({
        adUnitId: adUnitId,
      });
    
	  this.videoAd.onLoad(() => {
        resolve('视频激励广告加载成功');
      });

      this.videoAd.onError((err) => {
        reject(new Error(`视频激励广告加载失败: ${err.errMsg}`));
      });
	 this.videoAd.onClose((res) => {
			// 调用提供的回调函数，并传递广告关闭的结果
			if (onCloseCallback) {
				console.log('回调')
			  onCloseCallback(res);
			}
			// 可以根据 res.isEnded 来判断用户是否完整观看广告，并在此处执行其他逻辑
			// 但为了灵活性，我们将这部分逻辑留给调用者去处理
		  });
      // 可以添加其他事件监听，如 onClose 等
    });
  }

  // 展示视频激励广告
  showVideoAd() {
    return new Promise((resolve, reject) => {
      if (!this.videoAd) {
        reject(new Error('视频激励广告未加载'));
        return;
      }
      this.videoAd.show()
        .then(() => resolve('视频激励广告展示成功'))
        .catch((err) => reject(new Error(`视频激励广告展示失败: ${err.errMsg}`)));
    });
  }

  // 加载插屏广告
  loadInterstitialAd(adUnitId) {
    return new Promise((resolve, reject) => {
      if (!uni.createInterstitialAd) {
        reject(new Error('插屏广告API不可用'));
        return;
      }
      this.interstitialAd = window.uni.createInterstitialAd({
        adUnitId: adUnitId,
      });

      this.interstitialAd.onLoad(() => {
        resolve('插屏广告加载成功');
      });

      this.interstitialAd.onError((err) => {
        reject(new Error(`插屏广告加载失败: ${err.errMsg}`));
      });

      // 可以添加其他事件监听，如 onClose 等
    });
  }

  // 展示插屏广告
  showInterstitialAd() {
    return new Promise((resolve, reject) => {
      if (!this.interstitialAd) {
        reject(new Error('插屏广告未加载'));
        return;
      }
      this.interstitialAd.show()
        .then(() => resolve('插屏广告展示成功'))
        .catch((err) => reject(new Error(`插屏广告展示失败: ${err.errMsg}`)));
    });
  }

  // 关闭广告（对于视频激励广告和某些插屏广告可能不需要）
  // 通常视频激励广告会在用户观看完毕后自动关闭，插屏广告也可能有自动关闭的逻辑
  // 如果需要手动关闭，可以实现相应的方法，但这里不作为通用方法提供
}

export default new AdManager();